﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ComunesMGI.DataTypes;
using ComunesMGI.Enums;
using System.Windows.Forms;

namespace ComunesMGI.Controles
{
    public class TablaCamposControl : TableLayoutPanel
    {
        private List<TablaCamposCampo> _campos;

        public List<DataCampo> GetCampos()
        {
            List<DataCampo> ldc = new List<DataCampo>();

            foreach (TablaCamposCampo campo in _campos)
            {
                ldc.Add(campo.ObtenerDataCampo());
            }

            return ldc;
        }

        public bool ValidarCampos()
        {
            foreach (TablaCamposCampo campo in _campos)
            {
                if (!campo.IsValido()) return false;
            }
            return true;
        }

        public TablaCamposControl(List<DataCampo> campos, ErrorProvider er)
        {
            this.AutoScroll = true;
            this.Dock = DockStyle.Fill;
            this.ColumnCount = 2;
            this.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 100));

            // creo la lista de campos
            _campos = new List<TablaCamposCampo>();
            this.RowCount = campos.Count + 1;
            int fila = 0;
            TablaCamposCampo campoActual = null;
            foreach (DataCampo dc in campos)
            {
                // creo el objeto campo correspondiente
                switch (dc.Tipo)
                {
                    case CampoSharepoint.DateTime:
                        campoActual = new TablaCamposCampoDateTime(dc);
                        break;
                    case CampoSharepoint.Number:
                        campoActual = new TablaCamposCampoNumber(dc);
                        break;
                    case CampoSharepoint.Text:
                        campoActual = new TablaCamposCampoText(dc);
                        break;
                    case CampoSharepoint.Note:
                        campoActual = new TablaCamposCampoNote(dc);
                        break;

                    case CampoSharepoint.Choice:
                        campoActual = new TablaCamposCampoChoice(dc);
                        break;

                    case CampoSharepoint.User:
                        campoActual = new TablaCamposCampoUser(dc);
                        break;

                    case CampoSharepoint.Boolean:
                        campoActual = new TablaCamposCampoBoolean(dc);
                        break;

                    default:
                        throw new NotImplementedException();
                }

                // agrego la etiqueta
                Label etiqueta = new Label();
                etiqueta.Name = "lblEtiqueta" + fila;
                etiqueta.Text = dc.Titulo;
                etiqueta.Anchor = AnchorStyles.Left;
                etiqueta.AutoSize = true;
                this.Controls.Add(etiqueta, 0, fila);

                // agrego el campo a la tabla
                this.Controls.Add(campoActual.GetControl(), 1, fila);

                // propiedades de la fila
                this.RowStyles.Add(new RowStyle(SizeType.AutoSize));

                // agrego la validacion
                campoActual.AgregarValidacion(er);

                _campos.Add(campoActual);
                fila++;
            }
        }
    }
}